import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-03-28
 * Time: 23:10
 */

/**
 *  基于 LinkedHashMap 的 LRUCache, 只需重写 removeEldestEntry 函数即可
 */
public class LRUCache extends LinkedHashMap <Integer, Integer>{

    public int capacity;

    public LRUCache(int capacity){
        //         这个 true 代表基于访问顺序
        //          如果是  false 那么代表基于插入顺序
        super(capacity, 0.75f,  true);
        this.capacity=capacity;
    }

    @Override
    public Integer put(Integer key, Integer value) {
        return super.put(key, value);
    }

    @Override
    public Integer get(Object key) {
        return super.get(key);
    }

    //    虽然我们在上面的构造函数中已经 将 其中一个参数 设置为 true , 基于访问顺序了,
//    但是当数据个数超过 capacity 是不会删除 最久未使用的节点
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        //    这个函数默认返回的 是 false
        //    而我们需要当 数据量 超过 capacity 时, 删除最久未使用的节点
        return size()>capacity;
    }
}
